package cn.djb.day22;

/**
 * 一个整型数组 nums 里除两个数字之外，其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)，空间复杂度是O(1)。
 */
class Solution {

    public int[] singleNumbers(int[] nums) {
        int x = 0, y = 0, m = 1, n = 0;

        for (int num : nums) {
            n ^= num;
        }
        while ((n & m) == 0) {
            m <<= 1;
        }
        for (int num : nums) {
            if ((m & num) != 0) {
                x ^= num;
            } else {
                y ^= num;
            }
        }

        return new int[]{x,y};

    }
}